package com.itjin.service;

import com.itjin.model.domain.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.itjin.model.domain.vo.UserRegisterVO;
import com.itjin.model.domain.vo.UserVO;
import com.itjin.model.result.Result;

import java.util.List;

/**
 * @author 胡
 * @description 针对表【user】的数据库操作Service
 * @createDate 2025-01-19 14:08:44
 */
public interface UserService extends IService<User> {

    /**
     * 注册功能校验
     *
     * @param userAccount
     * @param userPassword
     * @param checkPassword
     * @return
     */
    Result<UserRegisterVO> userRegister(String userAccount, String email, String captcha, String userPassword,
            String checkPassword);

    /**
     * 用户登录（支持账号或邮箱登录）
     * 
     * @param loginIdentifier 账号或邮箱
     * @param userPassword    密码
     * @return 用户信息
     */
    User userLogin(String loginIdentifier, String userPassword);

    /**
     * 用户管理接口
     */

    /**
     * 用户信息脱敏
     * 
     * @param user
     * @return
     */

    User getSafetyUser(User user);

    /**
     * 关注用户
     * 
     * @param followerId 关注者ID
     * @param followedId 被关注者ID
     * @return 关注结果
     */
    boolean followUser(Integer followerId, Integer followedId);

    /**
     * 获取用户的关注列表
     * 
     * @param userId 用户ID
     * @return 关注的用户列表
     */
    List<UserVO> getUserFollowList(Integer userId);

    /**
     * 获取用户的粉丝列表
     * 
     * @param userId 用户ID
     * @return 粉丝用户列表
     */
    List<UserVO> getUserFansList(Integer userId);

    /**
     * 取消关注用户
     * 
     * @param followerId 关注者ID
     * @param followedId 被关注者ID
     * @return 取消关注结果
     */
    boolean unfollowUser(Integer followerId, Integer followedId);

    /**
     * 检查关注状态
     * 
     * @param followerId 关注者ID
     * @param followedId 被关注者ID
     * @return 关注状态（true-已关注，false-未关注）
     */
    boolean checkFollowStatus(Integer followerId, Integer followedId);

    /**
     * 更新用户标签
     *
     * @param userId 用户ID
     * @param tags   用户标签列表（不超过5个）
     * @return 是否更新成功
     */
    boolean updateUserTags(Integer userId, List<String> tags);

    /**
     * 通过邮箱重置密码
     * 
     * @param email       用户邮箱
     * @param newPassword 新密码
     * @return 重置是否成功
     */
    boolean resetPasswordByEmail(String email, String newPassword);

    /**
     * 增加用户货币
     * 
     * @param userId 用户ID
     * @param coins  增加的货币数量
     * @return 增加是否成功
     */
    boolean addUserCoins(Integer userId, Integer coins);
}
